import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn } from 'typeorm';
// @Entity('table_name')：指定映射的表名。
// @PrimaryGeneratedColumn()：主键，uuid 表示生成 UUID 格式（也可用 increment 自增数字）。
// @Column()：定义字段，可指定类型、长度、唯一性等约束。
// @CreateDateColumn() /@UpdateDateColumn()：自动记录创建 / 更新时间。

/**
 * ? 用户实体
 * ! 用户表，存储用户相关信息
 * * 映射到数据库的 "users" 表
 */
@Entity('users')
export class User {
  @PrimaryGeneratedColumn('increment') // 主键，自增数字
  id: number;

  @Column({
    type: 'varchar',
    length: 50,
    comment: '用户昵称'
  })
  username: string;

  @Column({
    type: 'varchar',
    unique: true, // 邮箱地址唯一
    comment: '用户邮箱'
  })
  email: string;

  @Column({
    type: 'varchar',
    select: false, // 查询时默认不返回密码（安全起见）
    comment: '加密后的密码'
  })
  password: string;

  @Column({
    type: 'enum',
    enum: ['0', '1', '2'],
    default: '0',
    comment: '用户性别: 0 未知 1 男性 2 女性'
  })
  gender: string;

  @Column({
    type: 'varchar',
    length: 11,
    comment: '用户手机号',
    nullable: true,
  })
  mobile: string;

  @Column({
    type: 'enum',
    enum: ['0', '1'],
    default: '1',
    comment: '用户状态: 1 正常 0 禁用'
  })
  status: string;

  @Column({
    type: 'varchar',
    length: 100,
    comment: '用户头像',
    nullable: true,
  })
  avatar: string;

  @Column({
    type: 'varchar',
    length: 50,
    comment: '用户角色',
    nullable: true,
  })
  role: string;

  @Column({
    type: 'varchar',
    length: 200,
    comment: '用户备注',
    nullable: true,
  })
  comment: string;

  @Column({
    type: 'varchar',
    length: 50,
    comment: '用户注册IP',
    nullable: true,
  })
  register_ip: string;

  @Column({
    type: 'int',
    default: 0,
    comment: '用户积分'
  })
  score: number;

  @Column({
    type: 'enum',
    enum: ['0', '1'],
    default: '0',
    comment: '用户实名认证状态: 0 未认证 1 已认证'
  })
  realname_auth: string;

  @CreateDateColumn({ comment: '创建时间' })
  createdAt: Date;

  @UpdateDateColumn({ comment: '更新时间' })
  updatedAt: Date;
}